/**
** @author:	   PROJECT R
** @date:      2016.12.26
** @brief:     链表的操作
*/

#include <stdio.h>
#include <stdlib.h>

typedef int data_t;

typedef struct node_t {
	data_t data;
	struct node_t *next;
} linknode_t, *linklist_t;

/**
** @brief 声明函数
*/
int create_empty_list()；
int empty_link_list(linklist_t h)；
int length_link_list(linklist_t h)；

/**
** @brief 主函数
*/
int main(int argc, const char *argv[]){
	link_node_t *H = NULL;
	
	if(NULL == (H = list_create())){
		printf("list_create failed\n");
		return -1;
	}
	
	return 0;
}
/**
** @brief 创建链表
** @return h链表头
*/

int create_empty_list(){
	linklist_t h;

	h = (link_list)malloc(sizeof(link));
	h->next = NULL;

	return h;
}

/**
** @brief 判断链表是否为空
** @param h 链表头
** @return 0:成功 1：失败
*/

int empty_link_list(linklist_t h){
	return (NULL == h->next);
}

/**
** @brief 求链表长度
** @param h 链表头
** @return 链表长度
*/
int length_link_list(linklist_t h){
	int len = 0;

	h = h->next;
	while (NULL != h){
		len++;
		h = h->next;
	}

	return len;
}

/**
** @brief 展示链表
** @param h 链表头
*/
void list_show(linklist_t h){
	linknode_t *p = NULL;
	p = h->next;
	
	while(p){
		printf("%d ",p->data);
		p = p->next;
	}
	
	puts("");
}

 
 /**
 * @brief  改指定位置链表节点数据
 * @param  h: 代表链表头节点， y: 代表新赋值，pos: 代表链表节点位置，
 *         第一个节点位置为0， Length:代表链表长度
 * @return 0:成功 -1：失败
 */
 
 int change_link_list_pos(linklist_t h, data_t y, data_t pos, data_t Length){
	 
	 h = h->next;
	 
	 if((pos < 0) || (pos > Length)) 
		 return -1;
	 
	 while( pos-- ){
		 h = h->next;
	 }
	 
	 h->data = y;
	 
	 return 0;
 }
 
 /**
 * @brief  改指定数据的链表节点数据
 * @param  h: 代表链表头结点，x: 代表指定数据，y: 代表新赋值，
 * @return 0:成功 -1：失败
 */
 
 int change_link_list_data(linklist_t h, data_t x, data_t y){
	 
	 linklist_t p = h->next;
	 
	 while( NULL != p ){
		 if( p->data == x ){ 
			 p->data = y;
		 }
		 else { 
			 p = p->next;	
		 }
	 }
	 
	 return 0;
 } 
 
 /**
 ** @author:	    项空月
 ** @date:          2016.12.26
 ** @brief:         链表的删除
 */

 /**
 * @brief 链表的删除
 * @param num 代表第几个链表
 * @return 0:成功 1：失败
 */
 
 //按位置删除
int delete_linklist_1(linklist_t h,int pos){
	linklist_t p;

	if ((pos < 0) || (pos >= LengthLinklist(h))) {
	return 1;
	}
	while ( pos-- ){
		h = h->next;
	}
	
	p = h->next;
	h->next = p->next;
	free(p);

	return 0;
}
//指定数据删除
void delete_linklist_2(linklist_t h, data_t x){
	linklist_t p = h->next;

	while (Null != p)
	{
		if (p->data == x)
		{
			h->next = p->next; 
			free(p);
		}
		else
		{
			h = h->next;
		}
		p = h->next;
	}

	return;
} 